#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time     : 2024/2/19 11:09
# @Author   : Nabby
# @FileName : obs_tool.py
# @ Desc    : 对象存储

import oss2
import os
from oss2.credentials import EnvironmentVariableCredentialsProvider

os.environ['OSS_ACCESS_KEY_ID'] = 'LTAI5t6mxiNPYYdxksHiUZvd'
os.environ['OSS_ACCESS_KEY_SECRET'] = 'Dt3vlxQzRtYKxGXS97Ngg4ChHGOHvh'
Endpoint = 'oss-cn-hongkong.aliyuncs.com'
bucket_name = 'jasco'

# 从环境变量中获取访问凭证。运行本代码示例之前，请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1（杭州）为例，Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
# 填写Bucket名称。
bucket = oss2.Bucket(auth, f'https://{Endpoint}', bucket_name)

# # 必须以二进制的方式打开文件。
# # 填写本地文件的完整路径。如果未指定本地路径，则默认从示例程序所属项目对应本地路径中上传文件。
# with open(r'G:\Downloads\Snipaste_2025-01-06_10-25-16.png', 'rb') as fileobj:
#     # Seek方法用于指定从第1000个字节位置开始读写。上传时会从您指定的第1000个字节位置开始上传，直到文件结束。
#     fileobj.seek(1000, os.SEEK_SET)
#     # Tell方法用于返回当前位置。
#     current = fileobj.tell()
#     # 填写Object完整路径。Object完整路径中不能包含Bucket名称。
#     res = bucket.put_object('Snipaste_2025-01-06_10-25-16.png', fileobj)
#     print(res.crc, res.etag)

# 填写Object完整路径和本地文件的完整路径。Object完整路径中不能包含Bucket名称。
# 如果未指定本地路径，则默认从示例程序所属项目对应本地路径中上传文件。
# bucket.put_object_from_file('Snipaste_2025-01-06_10-25-16.png', 'G:\Downloads\Snipaste_2025-01-06_10-25-16.png')

def oss_upload_file(file_name, _file):
    """
    上传文件
    :param key:
    :param file:
    :return:
    """
    try:
        bucket.put_object(file_name, _file)
    except Exception as e:
        print(e)
        return False
    return True


